package benny_driving_ser.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import atg.taglib.json.util.JSONObject;

public class NetTool {
	private static final int REQUEST_TIMEOUT = 10 * 1000;// ��������ʱ10����
	private static final int WAIT_TIMEOUT = 10 * 1000; // ���õȴ���ݳ�ʱʱ��10����
	private static final String ENCODING = "utf-8";
	public static final String EXCEPTION_SERVER_ERROR = "ServerErrorException";
	private static Exception e_server_error = new Exception(
			EXCEPTION_SERVER_ERROR);
	public static String cookieString = "";

	/**
	 * ͨ��get��ʽ�ύ����������
	 */
	// public static String sendGetRequest(String urlPath,
	// Map<String, String> params) throws Exception {
	//
	// // ʹ��StringBuilder����
	// StringBuilder sb = new StringBuilder(urlPath);
	// sb.append('?');
	//
	// // ���Map
	// for (Map.Entry<String, String> entry : params.entrySet()) {
	// sb.append(entry.getKey()).append('=')
	// .append(URLEncoder.encode(entry.getValue(), ENCODING))
	// .append('&');
	// }
	// sb.deleteCharAt(sb.length() - 1);
	// HttpGet httpGet = new HttpGet(sb.toString());
	// if (!cookieString.equals("")) {
	// // Log.i("junit", "now: " + cookieString);
	// httpGet.setHeader("Cookie", cookieString);
	// }
	// DefaultHttpClient httpClient = getThreadSafeClient();
	// HttpResponse response = httpClient.execute(httpGet);
	// List<Cookie> cookies = httpClient.getCookieStore().getCookies();
	// if (!cookies.isEmpty()) {
	// for (int i = 0; i < cookies.size(); i++) {
	// Cookie cookie = cookies.get(i);
	// cookieString = cookie.getName() + "=" + cookie.getValue();
	// // + ";domain=" + cookie.getDomain();
	// // cookieString = cookie.getValue();
	// }
	// }
	// // String str = doHttpGet(urlPath, httpClient);
	// // Log.i("junit", "session return: " + str);
	// if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
	// HttpEntity entity = response.getEntity();
	// String result = EntityUtils.toString(entity, HTTP.UTF_8);
	// // Log.i("HttpTest", "R!" + result);
	// httpClient.getConnectionManager().closeExpiredConnections();
	// httpClient.getConnectionManager().closeIdleConnections(500,
	// TimeUnit.MILLISECONDS);
	// return result;
	// }
	// // ������
	// URL url = new URL(sb.toString());
	// HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	// conn.setRequestMethod("GET");
	// conn.setRequestProperty("Content-Type", "text/xml");
	// conn.setRequestProperty("Charset", ENCODING);
	// conn.setConnectTimeout(REQUEST_TIMEOUT);
	// // ���������Ӧ����200�����ʾ�ɹ�
	// if (conn.getResponseCode() == HttpStatus.SC_OK) {
	// // ��÷�������Ӧ�����
	// BufferedReader in = new BufferedReader(new InputStreamReader(
	// conn.getInputStream(), ENCODING));
	// // ���
	// String retData = null;
	// String responseData = "";
	// while ((retData = in.readLine()) != null) {
	// responseData += retData;
	// }
	// in.close();
	// return responseData;
	// }
	// throw e_server_error;
	// }

	// private static String doHttpGet(String url, DefaultHttpClient httpClient)
	// {
	// String get_result = "";
	// try {
	// HttpGet httpGet = new HttpGet(url);
	// // ����Cookie
	// httpGet.setHeader("Cookie", cookieString);
	// // DefaultHttpClient httpClient = getThreadSafeClient();
	// HttpResponse response = httpClient.execute(httpGet);
	// if (response.getStatusLine().getStatusCode() == 200) {
	// HttpEntity entity = response.getEntity();
	// get_result = EntityUtils.toString(entity, HTTP.UTF_8);
	// }
	// } catch (ClientProtocolException e) {
	// // TODO Auto-generated catch block
	// e.printStackTrace();
	// } catch (ParseException e) {
	// // TODO Auto-generated catch block
	// e.printStackTrace();
	// } catch (IOException e) {
	// // TODO Auto-generated catch block
	// e.printStackTrace();
	// }
	// return get_result;
	// }

	/**
	 * ͨ���Զ���Post��ʽ�ύjson����������
	 * 
	 * @param urlPath
	 * @param json
	 * @param encoding
	 * @return
	 * @throws IOException
	 *             ���������쳣
	 * @throws MalformedURLException
	 *             URL��ַ�������
	 * @throws ProtocolException
	 *             HttpЭ�����
	 * @throws ServerErrorException
	 *             �������쳣
	 */
	// public static String sendPostRequest(String urlPath, JSONObject json)
	// throws Exception {
	// // �õ�ʵ��Ķ��������
	// byte[] entitydata = json.toString().getBytes();
	// URL url = new URL(urlPath);// throw MalformedURLException URL��ַ�������
	// HttpURLConnection conn = (HttpURLConnection) url.openConnection();//
	// // throw
	// // IOException
	// // ��������ʧ��
	// conn.setRequestMethod("POST");// throw ProtocolException HttpЭ�����
	// conn.setConnectTimeout(10000);
	// // ���ͨ��post�ύ��ݣ����������������������
	// conn.setDoOutput(true);
	// // ����ֻ�����������������ݳ��ȵ�ͷ�ֶ�
	// conn.setRequestProperty("Content-Type",
	// "application/x-www-form-urlencoded");
	// conn.setRequestProperty("Charset", ENCODING);
	// conn.setRequestProperty("Content-Length",
	// String.valueOf(entitydata.length));
	// OutputStream outStream = conn.getOutputStream();// throw IOException
	// // ��ʵ�����д���������
	// outStream.write(entitydata);// throw IOException
	// // �ڴ��е����ˢ��
	// outStream.flush();// throw IOException
	// outStream.close();// throw IOException
	// // ���������Ӧ����200�����ʾ�ɹ�
	// if (conn.getResponseCode() == HttpStatus.SC_OK) {// throw IOException
	// // ��÷�������Ӧ�����
	// BufferedReader in = new BufferedReader(new InputStreamReader(
	// conn.getInputStream(), ENCODING));// throw IOException
	// // ���
	// String retData = null;
	// String responseData = "";
	// while ((retData = in.readLine()) != null) {// throw IOException
	// responseData += retData;
	// }
	//
	// in.close();// throw IOException
	// return responseData;
	// }
	// throw e_server_error;// throw ServerErrorException �������쳣
	// }

	/**
	 * 
	 * 
	 * @param urlPath
	 * @param params
	 * @param encoding
	 * @return
	 * @throws Exception
	 */
	// @SuppressWarnings("deprecation")
	// public static String sendNameValuePostRequest(String urlPath,
	// List<BasicNameValuePair> params) throws Exception {
	// String responseData = null;
	// HttpPost httpPost = new HttpPost(urlPath);// throw
	// // IllegalArgumentException
	// httpPost.setEntity(new UrlEncodedFormEntity(params, ENCODING));
	// DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
	// defaultHttpClient.getParams().setParameter(
	// CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
	// defaultHttpClient.getParams().setParameter(
	// CoreConnectionPNames.SO_TIMEOUT, 10000);
	// HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
	// if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
	// responseData = EntityUtils.toString(httpResponse.getEntity());
	// return responseData;
	// }
	// throw e_server_error;
	// }

	/**
	 * ������HTTPS��ȫģʽ���߲���cookie��ʱ��ʹ��HTTPclient�᷽��ܶ�
	 * ʹ��HTTPClient����Դ��Ŀ����������ύ����
	 */
	// @SuppressWarnings("deprecation")
	// public static String sendHttpClientPost(String urlPath,
	// Map<String, String> params, String encoding) throws Exception {
	// // ��Ҫ�Ѳ���ŵ�NameValuePair
	// List<NameValuePair> paramPairs = new ArrayList<NameValuePair>();
	// if (params != null && !params.isEmpty()) {
	// for (Map.Entry<String, String> entry : params.entrySet()) {
	// paramPairs.add(new BasicNameValuePair(entry.getKey(), entry
	// .getValue()));
	// }
	// }
	// // �����������б��룬�õ�ʵ�����
	// UrlEncodedFormEntity entitydata = new UrlEncodedFormEntity(paramPairs,
	// encoding);
	// // ����һ������·��
	// HttpPost post = new HttpPost(urlPath);
	// // ��������ʵ��
	// post.setEntity(entitydata);
	// // ���������
	// DefaultHttpClient client = new DefaultHttpClient();
	// // ִ��post����
	// HttpResponse response = client.execute(post);
	// // ��״̬���л�ȡ״̬�룬�ж���Ӧ���Ƿ���Ҫ��
	// if (response.getStatusLine().getStatusCode() == 200) {
	// HttpEntity entity = response.getEntity();
	// InputStream inputStream = entity.getContent();
	// InputStreamReader inputStreamReader = new InputStreamReader(
	// inputStream, encoding);
	// BufferedReader reader = new BufferedReader(inputStreamReader);//
	// ���ַ��õġ�
	// String s;
	// String responseData = "";
	// while (((s = reader.readLine()) != null)) {
	// responseData += s;
	// }
	// reader.close();// �ر�������
	// return responseData;
	// }
	// return "sendHttpClientPost error!";
	// }
	//
	// @SuppressWarnings("deprecation")
	// public static DefaultHttpClient getThreadSafeClient() {
	//
	// DefaultHttpClient client = new DefaultHttpClient();
	// ClientConnectionManager manager = client.getConnectionManager();
	// HttpParams params = client.getParams();
	// HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);
	// HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
	// client = new DefaultHttpClient(new ThreadSafeClientConnManager(params,
	// manager.getSchemeRegistry()), params);
	// return client;
	// }
}
